package hdfs;

import org.apache.hadoop.net.DNSToSwitchMapping;

import java.util.ArrayList;
import java.util.List;

public class RackAwareness implements DNSToSwitchMapping {
    @Override
    public List<String> resolve(List<String> names) {

        //以输入的节点的数量创建输出的机架名的数量
        ArrayList<String> rackList = new ArrayList<>(names.size());

        //初始化机架名和ip地址
        String rack = "";
        String ipStr = "";

        //如果输入的节点为空，直接返回空
        if(names==null || names.size()==0){
            return rackList;
        }

        //遍历所有的输入节点
        for (String name : names) {
            //如果是以主机名的形式传递的
            if(name.startsWith("node")){
                //截取node后面的内容
                ipStr = name.substring("node".length());
            }else{
                //如果是以ip地址的形式传递的，截取最后一个.后面的内容
                ipStr = name.substring(name.lastIndexOf("."));
            }

            //把字符串类型的ip转成int类型
            int ip = Integer.parseInt(ipStr);

            //分配机架
            if(ip==101 || ip==104){
                rack = "/rack111";
            }else {
                rack = "/rack222";
            }

            //把当前节点对应的机架名加入到列表中
            rackList.add(rack);
        }

        //返回所有节点对应的机架名
        return rackList;
    }

    @Override
    public void reloadCachedMappings() {

    }

    @Override
    public void reloadCachedMappings(List<String> names) {

    }
}
